package com.yk.satoken.demos.minio.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.io.File;

/**
 * @author YangKai
 * @create 2024-06-02 15:08
 * @version: 1.0
 * @Description:
 */
public class ResourcesConfig implements WebMvcConfigurer {


    /**
     * 上传文件存储在本地的根路径
     */
    @Value("${file.path}")
    private String localFilePath;

    /**
     * 资源映射路径 前缀
     */
    @Value("${file.prefix}")
    public String localFilePrefix;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /** 本地文件上传路径 */
        registry.addResourceHandler(localFilePrefix + "/**")
                .addResourceLocations("file:" + localFilePath + File.separator);
    }

    /**
     * 开启跨域
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 设置允许跨域的路由
        registry.addMapping( "/**")
                // 设置允许跨域请求的域名
                .allowedOrigins("*")
                // 设置允许的方法
                .allowedMethods("GET");
    }

}

/**
 * **ResourceHandlerRegistry是一个在Spring MVC框架中用于注册和管理静态资源处理器的类**。
 * ResourceHandlerRegistry主要用于保存服务静态资源的处理器的注册信息，这些静态资源可以是图片、CSS文件或其他类型的文件。通过使用ResourceHandlerRegistry，
 * 开发者可以方便地管理各种静态资源，并且能够设置对这些资源的访问路径和缓存策略，以优化浏览器中的资源加载效率。以下是对这类的具体介绍：
 * 1. **注册静态资源处理器**：ResourceHandlerRegistry提供了addResourceHandler方法，用于注册处理静态资源的处理器。每次调用此方法时，
 * 都会创建一个ResourceHandlerRegistration对象，该对象包含了资源处理器的配置信息，例如资源的URL模式和位置[^1^]。
 * 2. **配置资源位置**：开发者可以使用addResourceLocations方法为处理器指定一个或多个资源位置。这些位置可以是文件系统中的目录、类路径下的文件夹，
 * 甚至是远程存储系统中的资源。重要的是，每个位置都必须以斜杠("/")结尾，以确保资源可以被正确访问[^1^]。
 * 3. **设置缓存策略**：ResourceHandlerRegistration允许开发者设置HTTP缓存头，这对于提高网站加载速度和改善用户体验至关重要。通过合理设置ETag、
 * Last-Modifiedd、Cache-Control等头部信息，浏览器可以有效地缓存静态资源，减少不必要的网络请求[^1^]。
 * 4. **支持多种资源类型**：ResourceHandlerRegistry不仅支持常见的静态资源如图片和CSS文件，还支持其他各种类型的文件。这使得开发者能够灵活地管理和提供各种类型的资源，
 * 满足不同应用场景的需求[^2^]。
 * 此外，ResourceHandlerRegistry的使用通常出现在WebMvcConfigurer的配置类中，这是Spring MVC提供的一个接口，允许开发者对MVC配置进行自定义。
 * 通过实现该接口并重写addResourceHandlers方法，开发者可以精细控制静态资源的注册过程及其配置[^3^]。
 * 综上所述，ResourceHandlerRegistry是Spring MVC中用于注册和管理静态资源处理器的关键组件。它不仅简化了静态资源的管理，还提供了丰富的配置选项，
 * 使得开发者能够优化资源的加载效率和提高网站的响应速度。
 */
